home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0089_Reding VGA Palettes.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  2KB  |  44 lines

  1. {
  2. >thanks for the example -- do you have any idea how to read the whole
  3. >palette at one time, etc?
  4.  
  5. Here you go...  It will work on all computers.  I do not use the 286
  6. string instructions, as they go too fast for some VL-Bus video cards causing
  7. incorrect colours.  The first part waits for a full vertical retrace
  8. before changing the colours to prevent "snow" at the top of the display on
  9. slower computers.  The only time you'll see the snow is if you continuously
  10. get or set the palette such as in a screen fade.
  11. }
  12.  
  13. Procedure VGAGetPalette(Pal:Pointer); Assembler;
  14. Asm
  15.   { Wait for Vertical Retrace }
  16.   MOV   DX,3DAh
  17. @@WaitNotVSync:
  18.   IN    AL,DX
  19. (91 min left), (H)elp, More?   AND   AL,00001000b
  20.   JNZ   @@WaitNotVSync
  21. @@WaitVSync:
  22.   IN    AL,DX
  23.   AND   AL,00001000b
  24.   JZ    @@WaitVSync
  25.  
  26.   LES   DI,[Pal]                    {;ES:DI:=Palette Pointer           }
  27.   XOR   AX,AX                       {;Start with DAC 0                 }
  28.   MOV   CX,256                      {;End with DAC 255                 }
  29.   MOV   DX,3C7h                     {; |Send Starting DAC register     }
  30.   OUT   DX,AL                       {;/                                }
  31.   INC   DX                          {; |DX:=DAC Data register          }
  32.   INC   DX                          {;/                                }
  33.   CLD
  34. @@DACLoop:
  35.   IN    AL,DX                       {;Read Red Byte                    }
  36.   STOSB                             {;Store Red Byte                   }
  37.   IN    AL,DX                       {;Read Green Byte                  }
  38.   STOSB                             {;Store Green Byte                 }
  39.   IN    AL,DX                       {;Read Blue Byte                   }
  40.   STOSB                             {;Store Blue Byte                  }
  41.   LOOP  @@DACLoop                   {;Loop until CX=0                  }
  42. End;
  43.  
  44.